gpsmath isolation (#1218)
authortsteven4 <13596209+tsteven4@users.noreply.github.com>
Wed, 15 Nov 2023 17:36:59 +0000 (10:36 -0700)
committerGitHub <noreply@github.com>
Wed, 15 Nov 2023 17:36:59 +0000 (10:36 -0700)
gpsmath/gpsdatum/gpsproj don't have dependencies
on the rest of jeeps.

cleanup typedefs, macros, const tables.

jeeps/gpsdatum.h
jeeps/gpsmath.cc
jeeps/gpsmath.h
jeeps/gpsmem.h
jeeps/gpsproj.cc
jeeps/gpsproj.h

index 4444797ddfef2f429f3e1941a5a4305720e51960..2cfbb366aae0d85cc0b87034082d230c3c311cbf 100644 (file)
 #define JEEPS_GPSDATUM_H_INCLUDED_
 
 
-
-  typedef struct GPS_SEllipse {
-    const char*   name;
-    double a;
-    double invf;
-  } GPS_OEllipse, *GPS_PEllipse;
-
-  GPS_OEllipse GPS_Ellipse[]= {
-    { "Airy 1830",               6377563.396, 299.3249646 },
-    { "Airy 1830 Modified",      6377340.189, 299.3249646 },
-    { "Australian National",     6378160.000, 298.25 },
-    { "Bessel 1841 (Namibia)",   6377483.865, 299.1528128 },
-    { "Bessel 1841",             6377397.155, 299.1528128 },
-    { "Clarke 1866",             6378206.400, 294.9786982 },
-    { "Clarke 1880",             6378249.145, 293.465 },
-    { "Everest (India 1830)",    6377276.345, 300.8017 },
-    { "Everest (Sabah Sarawak)", 6377298.556, 300.8017 },
-    { "Everest (India 1956)",    6377301.243, 300.8017 },
-    { "Everest (Malaysia 1969)", 6377295.664, 300.8017 },
-    { "Everest (Malay & Sing)",  6377304.063, 300.8017 },
-    { "Everest (Pakistan)",      6377309.613, 300.8017 },
-    { "Modified Fischer 1960",   6378155.000, 298.3 },
-    { "Helmert 1906",            6378200.000, 298.3 },
-    { "Hough 1960",              6378270.000, 297.0 },
-    { "Indonesian 1974",         6378160.000, 298.247 },
-    { "International 1924",      6378388.000, 297.0 },
-    { "Krassovsky 1940",         6378245.000, 298.3 },
-    { "GRS67",                   6378160.000, 6356774.516 },
-    { "GRS75",                   6378140.000, 6356755.288 },
-    { "GRS80",                   6378137.000, 298.257222101 },
-    { "S. American 1969",        6378160.000, 298.25 },
-    { "WGS60",                   6378165.000, 298.3 },
-    { "WGS66",                   6378145.000, 298.25 },
-    { "WGS72",                   6378135.000, 298.26 },
-    { "WGS84",                   6378137.000, 298.257223563 },
-    { "Clarke 1880 (Benoit)",    6378300.789, 293.466 },
-  };
-
-
-
-  typedef struct GPS_SDatum {
-    const char*   name;
-    int    ellipse;
-    double dx;
-    double dy;
-    double dz;
-  } GPS_ODatum, *GPS_PDatum;
-
-  GPS_ODatum GPS_Datum[]= {
-    /* 000 */    { "Adindan",                  6,      -166,   -15,    204     },
-    /* 001 */    { "AFG",              18,     -43,    -163,   45      },
-    /* 002 */    { "Ain-El-Abd",               17,     -150,   -251,   -2      },
-    /* 003 */    { "Alaska-NAD27",     5,      -5,     135,    172     },
-    /* 004 */    { "Alaska-Canada",    6,      -9,     151,    185     },
-    /* 005 */    { "Anna-1-Astro",     2,      -491,   -22,    435     },
-    /* 006 */    { "ARC 1950 Mean",    6,      -143,   -90,    -294    },
-    /* 007 */    { "ARC 1960 Mean",    6,      -160,   -8,     -300    },
-    /* 008 */    { "Asc Island 58",    17,     -207,   107,    52      },
-    /* 009 */    { "Astro B4",         17,     114,    -116,   -333    },
-    /* 010 */    { "Astro Beacon E",   17,     145,    75,     -272    },
-    /* 011 */    { "Astro pos 71/4",   17,     -320,   550,    -494    },
-    /* 012 */    { "Astro stn 52",     17,     124,    -234,   -25     },
-    /* 013 */    { "Australia Geo 1984",       2,      -134,   -48,    149     },
-    /* 014 */    { "Bahamas NAD27",    6,      -4,     154,    178     },
-    /* 015 */    { "Bellevue IGN",     17,     -127,   -769,   472     },
-    /* 016 */    { "Bermuda 1957",     6,      -73,    213,    296     },
-    /* 017 */    { "Bukit Rimpah",             4,      -384,   664,    -48     },
-    /* 018 */    { "Camp_Area_Astro",  17,     -104,   -129,   239     },
-    /* 019 */    { "Campo_Inchauspe",  17,     -148,   136,    90      },
-    /* 020 */    { "Canada_Mean(NAD27)",       5,      -10,    158,    187     },
-    /* 021 */    { "Canal_Zone_(NAD27)",       5,      0,      125,    201     },
-    /* 022 */    { "Canton_Island_1966",       17,     298,    -304,   -375    },
-    /* 023 */    { "Cape",             6,      -136,   -108,   -292    },
-    /* 024 */    { "Cape_Canaveral_mean",      5,      -2,     150,    181     },
-    /* 025 */    { "Carribean NAD27",  5,      -7,     152,    178     },
-    /* 026 */    { "Carthage",         6,      -263,   6,      431     },
-    /* 027 */    { "Cent America NAD27",       5 ,     0,      125,    194     },
-    /* 028 */    { "Chatham 1971",     17,     175,    -38,    113     },
-    /* 029 */    { "Chua Astro",       17,     -134,   229,    -29     },
-    /* 030 */    { "Corrego Alegre",   17,     -206,   172,    -6      },
-    /* 031 */    { "Cuba NAD27",               5,      -9,     152,    178     },
-    /* 032 */    { "Cyprus",           17,     -104,   -101,   -140    },
-    /* 033 */    { "Djakarta(Batavia)",        4,      -377,   681,    -50     },
-    /* 034 */    { "DOS 1968",                 17,     230,    -199,   -752    },
-    /* 035 */    { "Easter lsland 1967",       17,     211,    147,    111     },
-    /* 036 */    { "Egypt",                    17,     -130,   -117,   -151    },
-    /* 037 */    { "European 1950",            17,     -87,    -96,    -120    },
-    /* 038 */    { "European 1950 mean",       17,     -87,    -98,    -121    },
-    /* 039 */    { "European 1979 mean",       17,     -86,    -98,    -119    },
-    /* 040 */    { "Finnish Nautical",         17,     -78,    -231,   -97     },
-    /* 041 */    { "Gandajika Base",           17,     -133,   -321,   50      },
-    /* 042 */    { "Geodetic Datum 49",        17,     84,     -22,    209     },
-    /* 043 */    { "Ghana",                    26,     0,      0,      0       },
-    /* 044 */    { "Greenland NAD27",          5,      11,     114,    195     },
-    /* 045 */    { "Guam 1963",                5,      -100,   -248,   259     },
-    /* 046 */    { "Gunung Segara",            4,      -403,   684,    41      },
-    /* 047 */    { "Gunung Serindung 1962",    26,     0,      0,      0       },
-    /* 048 */    { "GUX1 Astro",               17,     252,    -209,   -751    },
-    /* 049 */    { "Herat North",              17,     -333,   -222,   114     },
-    /* 050 */    { "Hjorsey 1955",             17,     -73,    46,     86      },
-    /* 051 */    { "Hong Kong 1963",           17,     -156,   -271,   -189    },
-    /* 052 */    { "Hu-Tzu-Shan",              17,     -634,   -549,   -201    },
-    /* 053 */    { "Indian",                   9,      289,    734,    257     },
-    /* 054 */    { "Iran",                     17,     -117,   -132,   -164    },
-    /* 055 */    { "Ireland 1965",             1,      506,    -122,   611     },
-    /* 056 */    { "ISTS 073 Astro 69",        17,     208,    -435,   -229    },
-    /* 057 */    { "Johnston Island 61",       17,     191,    -77,    -204    },
-    /* 058 */    { "Kandawala",                7,      -97,    787,    86      },
-    /* 059 */    { "Kerguelen Island",         17,     145,    -187,   103     },
-    /* 060 */    { "Kertau 48",                11,     -11,    851,    5       },
-    /* 061 */    { "L.C. 5 Astro",             5,      42,     124,    147     },
-    /* 062 */    { "La Reunion",               17,     94,     -948,   -1262   },
-    /* 063 */    { "Liberia 1964",             6,      -90,    40,     88      },
-    /* 064 */    { "Luzon",                    5,      -133,   -77,    -51     },
-    /* 065 */    { "Mahe 1971",                6,      41,     -220,   -134    },
-    /* 066 */    { "Marco Astro",              17,     -289,   -124,   60      },
-    /* 067 */    { "Masirah Is. Nahrwan",      6,      -247,   -148,   369     },
-    /* 068 */    { "Massawa",                  4,      639,    405,    60      },
-    /* 069 */    { "Merchich",                 6,      31,     146,    47      },
-    /* 070 */    { "Mexico NAD27",             5,      -12,    130,    190     },
-    /* 071 */    { "Midway Astro 61",          17,     912,    -58,    1227    },
-    /* 072 */    { "Mindanao",                 5,      -133,   -79,    -72     },
-    /* 073 */    { "Minna",                    6,      -92,    -93,    122     },
-    /* 074 */    { "Montjong Lowe",            26,     0,      0,      0       },
-    /* 075 */    { "Nahrwan",                  6,      -231,   -196,   482     },
-    /* 076 */    { "Naparima BWI",             17,     -2,     374,    172     },
-    /* 077 */    { "North America 83",         21,     0,      0,      0       },
-    /* 078 */    { "N. America 1927 mean",     5,      -8,     160,    176     },
-    /* 079 */    { "Observatorio 1966",        17,     -425,   -169,   81      },
-    /* 080 */    { "Old Egyptian",             14,     -130,   110,    -13     },
-    /* 081 */    { "Old Hawaiian_mean",        5,      89,     -279,   -183    },
-    /* 082 */    { "Old Hawaiian Kauai",       5,      45,     -290,   -172    },
-    /* 083 */    { "Old Hawaiian Maui",        5,      65,     -290,   -190    },
-    /* 084 */    { "Old Hawaiian Oahu",        5,      56,     -284,   -181    },
-    /* 085 */    { "Oman",                     6,      -346,   -1,     224     },
-    /* 086 */    { "OSGB36",                   0,      375,    -111,   431     },
-    /* 087 */    { "Pico De Las Nieves",       17,     -307,   -92,    127     },
-    /* 088 */    { "Pitcairn Astro 67",        17,     185,    165,    42      },
-    /* 089 */    { "S. Am. 1956 mean(P)",      17,     -288,   175,    -376    },
-    /* 090 */    { "S. Chilean 1963 (P)",      17,     16,     196,    93      },
-    /* 091 */    { "Puerto Rico",              5,      11,     72,     -101    },
-    /* 092 */    { "Pulkovo 1942",             18,     28,     -130,   -95     },
-    /* 093 */    { "Qornoq",                   17,     164,    138,    -189    },
-    /* 094 */    { "Quatar National",          17,     -128,   -283,   22      },
-    /* 095 */    { "Rome 1940",                17,     -225,   -65,    9       },
-    /* 096 */    { "S-42(Pulkovo1942)",        18,     28,     -121,   -77     },
-    /* 097 */    { "S.E.Asia_(Indian)",        7,      173,    750,    264     },
-    /* 098 */    { "SAD-69/Brazil",            22,     -60,    -2,     -41     },
-    /* 099 */    { "Santa Braz",               17,     -203,   141,    53      },
-    /* 100 */    { "Santo (DOS)",              17,     170,    42,     84      },
-    /* 101 */    { "Sapper Hill 43",           17,     -355,   16,     74      },
-    /* 102 */    { "Schwarzeck",               3,      616,    97,     -251    },
-    /* 103 */    { "Sicily",                   17,     -97,    -88,    -135    },
-    /* 104 */    { "Sierra Leone 1960",        26,     0,      0,      0       },
-    /* 105 */    { "S. Am. 1969 mean",         22,     -57,    1,      -41     },
-    /* 106 */    { "South Asia",               13,     7,      -10,    -26     },
-    /* 107 */    { "Southeast Base",           17,     -499,   -249,   314     },
-    /* 108 */    { "Southwest Base",           17,     -104,   167,    -38     },
-    /* 109 */    { "Tananarive Obs 25",        17,     -189,   -242,   -91     },
-    /* 110 */    { "Thai/Viet (Indian)",       7,      214,    836,    303     },
-    /* 111 */    { "Timbalai 1948",            7,      -689,   691,    -45     },
-    /* 112 */    { "Tokyo mean",               4,      -128,   481,    664     },
-    /* 113 */    { "Tristan Astro 1968",       17,     -632,   438,    -609    },
-    /* 114 */    { "United Arab Emirates",     6,      -249,   -156,   381     },
-    /* 115 */    { "Viti Levu 1916",           6,      51,     391,    -36     },
-    /* 116 */    { "Wake Eniwetok 60",         15,     101,    52,     -39     },
-    /* 117 */    { "WGS 72",                   25,     0,      0,      5       },
-    /* 118 */    { "WGS 84",                   26,     0,      0,      0       },
-    /* 119 */    { "Yacare",                   17,     -155,   171,    37      },
-    /* 120 */    { "Zanderij",                 17,     -265,   120,    -358    },
-    /* 121 */    { "Sweden",           4,      424.3,  -80.5,  613.1   },
-    /* 122 */    { "GDA 94",           21,     0,      0,      0       },
-    /* 123 */    { "CH-1903",          4,      674,    15,     405     },
-    /* 124 */    { "Palestine 1923",        27,     -235,   -85,    264     },
-    /* 125 */    { "ITM (Israeli New)",     21,     -48,     55,    -52     },
-    { nullptr,                         0,      0,      0,      0       }
-  };
-
-
-  typedef struct GPS_SDatum_Alias {
-    const char* alias;
-    const int datum;
-  } GPS_ODatum_Alias, *GPS_PDatum_Alias;
-
-  GPS_ODatum_Alias GPS_DatumAlias[] = {
-    { "Australian GDA94", 122 },
-    { "Australian Geocentric 1994 (GDA94)", 122},  /* Observed in Ozi */
-    { "GDA94", 122 },
-    { "GDA-94", 122 },
-    { "CH1903", 123 },
-    { "CH 1903", 123 },
-    { "European 1950 (Spain and Portugal)", 38 },
-    { "Geodetic Datum 1949", 42 },
-    { "NAD27 Alaska", 3 },
-    { "NAD27 Bahamas", 14 },
-    { "NAD27 Canada", 4 },
-    { "NAD27 Canal Zone", 21 },
-    { "NAD27 Caribbean", 25 },
-    { "NAD27 Central", 27 },
-    { "NAD27 CONUS", 78 },
-    { "NAD27 Cuba", 31 },
-    { "NAD27 Greenland", 44 },
-    { "NAD27 Mexico", 70 },
-    { "NAD83", 77 },
-    { "NAD 83", 77 },
-    { "NAD-83", 77 },
-    { "OSGB 36", 86 },
-    { "OSGB-36", 86 },
-    { "Wake-Eniwetok 1960", 116 },
-    { "WGS72", 117 },
-    { "WGS-72", 117 },
-    { "WGS84", 118 },
-    { "WGS-84", 118 },
-    { "Israeli", 124 },
-    { "D_Israel_new", 125 },
-    { nullptr, -1 }
-  };
-
-
-  /* UK Ordnance Survey Nation Grid Map Codes */
-  static const char* UKNG[]= {
-    "SV","SW","SX","SY","SZ","TV","TW","SQ","SR","SS","ST","SU","TQ","TR",
-    "SL","SM","SN","SO","SP","TL","TM","SF","SG","SH","SJ","SK","TF","TG",
-    "SA","SB","SC","SD","SE","TA","TB","NV","NW","NX","NY","NZ","OV","OW",
-    "NQ","NR","NS","NT","NU","OQ","OR","NL","NM","NN","NO","NP","OL","OM",
-    "NF","NG","NH","NJ","NK","OF","OG","NA","NB","NC","ND","NE","OA","OB",
-    "HV","HW","HX","HY","HZ","JV","JW","HQ","HR","HS","HT","HU","JQ","JR",
-    "HL","HM","HN","HO","HP","JL","JM",""
-  };
+struct GPS_Ellipse {
+  const char*   name;
+  double a;
+  double invf;
+};
+
+const GPS_Ellipse GPS_Ellipses[]= {
+  { "Airy 1830",               6377563.396, 299.3249646 },
+  { "Airy 1830 Modified",      6377340.189, 299.3249646 },
+  { "Australian National",     6378160.000, 298.25 },
+  { "Bessel 1841 (Namibia)",   6377483.865, 299.1528128 },
+  { "Bessel 1841",             6377397.155, 299.1528128 },
+  { "Clarke 1866",             6378206.400, 294.9786982 },
+  { "Clarke 1880",             6378249.145, 293.465 },
+  { "Everest (India 1830)",    6377276.345, 300.8017 },
+  { "Everest (Sabah Sarawak)", 6377298.556, 300.8017 },
+  { "Everest (India 1956)",    6377301.243, 300.8017 },
+  { "Everest (Malaysia 1969)", 6377295.664, 300.8017 },
+  { "Everest (Malay & Sing)",  6377304.063, 300.8017 },
+  { "Everest (Pakistan)",      6377309.613, 300.8017 },
+  { "Modified Fischer 1960",   6378155.000, 298.3 },
+  { "Helmert 1906",            6378200.000, 298.3 },
+  { "Hough 1960",              6378270.000, 297.0 },
+  { "Indonesian 1974",         6378160.000, 298.247 },
+  { "International 1924",      6378388.000, 297.0 },
+  { "Krassovsky 1940",         6378245.000, 298.3 },
+  { "GRS67",                   6378160.000, 6356774.516 },
+  { "GRS75",                   6378140.000, 6356755.288 },
+  { "GRS80",                   6378137.000, 298.257222101 },
+  { "S. American 1969",        6378160.000, 298.25 },
+  { "WGS60",                   6378165.000, 298.3 },
+  { "WGS66",                   6378145.000, 298.25 },
+  { "WGS72",                   6378135.000, 298.26 },
+  { "WGS84",                   6378137.000, 298.257223563 },
+  { "Clarke 1880 (Benoit)",    6378300.789, 293.466 },
+};
+
+
+
+struct GPS_Datum {
+  const char*   name;
+  int    ellipse;
+  double dx;
+  double dy;
+  double dz;
+};
+
+const GPS_Datum GPS_Datums[]= {
+  /* 000 */    { "Adindan",            6,      -166,   -15,    204     },
+  /* 001 */    { "AFG",                18,     -43,    -163,   45      },
+  /* 002 */    { "Ain-El-Abd",                 17,     -150,   -251,   -2      },
+  /* 003 */    { "Alaska-NAD27",       5,      -5,     135,    172     },
+  /* 004 */    { "Alaska-Canada",      6,      -9,     151,    185     },
+  /* 005 */    { "Anna-1-Astro",       2,      -491,   -22,    435     },
+  /* 006 */    { "ARC 1950 Mean",      6,      -143,   -90,    -294    },
+  /* 007 */    { "ARC 1960 Mean",      6,      -160,   -8,     -300    },
+  /* 008 */    { "Asc Island 58",      17,     -207,   107,    52      },
+  /* 009 */    { "Astro B4",           17,     114,    -116,   -333    },
+  /* 010 */    { "Astro Beacon E",     17,     145,    75,     -272    },
+  /* 011 */    { "Astro pos 71/4",     17,     -320,   550,    -494    },
+  /* 012 */    { "Astro stn 52",       17,     124,    -234,   -25     },
+  /* 013 */    { "Australia Geo 1984",         2,      -134,   -48,    149     },
+  /* 014 */    { "Bahamas NAD27",      6,      -4,     154,    178     },
+  /* 015 */    { "Bellevue IGN",       17,     -127,   -769,   472     },
+  /* 016 */    { "Bermuda 1957",       6,      -73,    213,    296     },
+  /* 017 */    { "Bukit Rimpah",               4,      -384,   664,    -48     },
+  /* 018 */    { "Camp_Area_Astro",    17,     -104,   -129,   239     },
+  /* 019 */    { "Campo_Inchauspe",    17,     -148,   136,    90      },
+  /* 020 */    { "Canada_Mean(NAD27)",         5,      -10,    158,    187     },
+  /* 021 */    { "Canal_Zone_(NAD27)",         5,      0,      125,    201     },
+  /* 022 */    { "Canton_Island_1966",         17,     298,    -304,   -375    },
+  /* 023 */    { "Cape",               6,      -136,   -108,   -292    },
+  /* 024 */    { "Cape_Canaveral_mean",        5,      -2,     150,    181     },
+  /* 025 */    { "Carribean NAD27",    5,      -7,     152,    178     },
+  /* 026 */    { "Carthage",           6,      -263,   6,      431     },
+  /* 027 */    { "Cent America NAD27",         5,      0,      125,    194     },
+  /* 028 */    { "Chatham 1971",       17,     175,    -38,    113     },
+  /* 029 */    { "Chua Astro",         17,     -134,   229,    -29     },
+  /* 030 */    { "Corrego Alegre",     17,     -206,   172,    -6      },
+  /* 031 */    { "Cuba NAD27",                 5,      -9,     152,    178     },
+  /* 032 */    { "Cyprus",             17,     -104,   -101,   -140    },
+  /* 033 */    { "Djakarta(Batavia)",          4,      -377,   681,    -50     },
+  /* 034 */    { "DOS 1968",           17,     230,    -199,   -752    },
+  /* 035 */    { "Easter lsland 1967",         17,     211,    147,    111     },
+  /* 036 */    { "Egypt",              17,     -130,   -117,   -151    },
+  /* 037 */    { "European 1950",      17,     -87,    -96,    -120    },
+  /* 038 */    { "European 1950 mean", 17,     -87,    -98,    -121    },
+  /* 039 */    { "European 1979 mean", 17,     -86,    -98,    -119    },
+  /* 040 */    { "Finnish Nautical",   17,     -78,    -231,   -97     },
+  /* 041 */    { "Gandajika Base",     17,     -133,   -321,   50      },
+  /* 042 */    { "Geodetic Datum 49",  17,     84,     -22,    209     },
+  /* 043 */    { "Ghana",              26,     0,      0,      0       },
+  /* 044 */    { "Greenland NAD27",            5,      11,     114,    195     },
+  /* 045 */    { "Guam 1963",                  5,      -100,   -248,   259     },
+  /* 046 */    { "Gunung Segara",              4,      -403,   684,    41      },
+  /* 047 */    { "Gunung Serindung 1962",      26,     0,      0,      0       },
+  /* 048 */    { "GUX1 Astro",         17,     252,    -209,   -751    },
+  /* 049 */    { "Herat North",        17,     -333,   -222,   114     },
+  /* 050 */    { "Hjorsey 1955",       17,     -73,    46,     86      },
+  /* 051 */    { "Hong Kong 1963",     17,     -156,   -271,   -189    },
+  /* 052 */    { "Hu-Tzu-Shan",        17,     -634,   -549,   -201    },
+  /* 053 */    { "Indian",                     9,      289,    734,    257     },
+  /* 054 */    { "Iran",               17,     -117,   -132,   -164    },
+  /* 055 */    { "Ireland 1965",               1,      506,    -122,   611     },
+  /* 056 */    { "ISTS 073 Astro 69",  17,     208,    -435,   -229    },
+  /* 057 */    { "Johnston Island 61", 17,     191,    -77,    -204    },
+  /* 058 */    { "Kandawala",                  7,      -97,    787,    86      },
+  /* 059 */    { "Kerguelen Island",   17,     145,    -187,   103     },
+  /* 060 */    { "Kertau 48",          11,     -11,    851,    5       },
+  /* 061 */    { "L.C. 5 Astro",               5,      42,     124,    147     },
+  /* 062 */    { "La Reunion",         17,     94,     -948,   -1262   },
+  /* 063 */    { "Liberia 1964",               6,      -90,    40,     88      },
+  /* 064 */    { "Luzon",                      5,      -133,   -77,    -51     },
+  /* 065 */    { "Mahe 1971",                  6,      41,     -220,   -134    },
+  /* 066 */    { "Marco Astro",        17,     -289,   -124,   60      },
+  /* 067 */    { "Masirah Is. Nahrwan",        6,      -247,   -148,   369     },
+  /* 068 */    { "Massawa",                    4,      639,    405,    60      },
+  /* 069 */    { "Merchich",                   6,      31,     146,    47      },
+  /* 070 */    { "Mexico NAD27",               5,      -12,    130,    190     },
+  /* 071 */    { "Midway Astro 61",    17,     912,    -58,    1227    },
+  /* 072 */    { "Mindanao",                   5,      -133,   -79,    -72     },
+  /* 073 */    { "Minna",                      6,      -92,    -93,    122     },
+  /* 074 */    { "Montjong Lowe",      26,     0,      0,      0       },
+  /* 075 */    { "Nahrwan",                    6,      -231,   -196,   482     },
+  /* 076 */    { "Naparima BWI",       17,     -2,     374,    172     },
+  /* 077 */    { "North America 83",   21,     0,      0,      0       },
+  /* 078 */    { "N. America 1927 mean",       5,      -8,     160,    176     },
+  /* 079 */    { "Observatorio 1966",  17,     -425,   -169,   81      },
+  /* 080 */    { "Old Egyptian",       14,     -130,   110,    -13     },
+  /* 081 */    { "Old Hawaiian_mean",          5,      89,     -279,   -183    },
+  /* 082 */    { "Old Hawaiian Kauai",         5,      45,     -290,   -172    },
+  /* 083 */    { "Old Hawaiian Maui",          5,      65,     -290,   -190    },
+  /* 084 */    { "Old Hawaiian Oahu",          5,      56,     -284,   -181    },
+  /* 085 */    { "Oman",                       6,      -346,   -1,     224     },
+  /* 086 */    { "OSGB36",                     0,      375,    -111,   431     },
+  /* 087 */    { "Pico De Las Nieves", 17,     -307,   -92,    127     },
+  /* 088 */    { "Pitcairn Astro 67",  17,     185,    165,    42      },
+  /* 089 */    { "S. Am. 1956 mean(P)",        17,     -288,   175,    -376    },
+  /* 090 */    { "S. Chilean 1963 (P)",        17,     16,     196,    93      },
+  /* 091 */    { "Puerto Rico",                5,      11,     72,     -101    },
+  /* 092 */    { "Pulkovo 1942",       18,     28,     -130,   -95     },
+  /* 093 */    { "Qornoq",             17,     164,    138,    -189    },
+  /* 094 */    { "Quatar National",    17,     -128,   -283,   22      },
+  /* 095 */    { "Rome 1940",          17,     -225,   -65,    9       },
+  /* 096 */    { "S-42(Pulkovo1942)",  18,     28,     -121,   -77     },
+  /* 097 */    { "S.E.Asia_(Indian)",          7,      173,    750,    264     },
+  /* 098 */    { "SAD-69/Brazil",      22,     -60,    -2,     -41     },
+  /* 099 */    { "Santa Braz",         17,     -203,   141,    53      },
+  /* 100 */    { "Santo (DOS)",        17,     170,    42,     84      },
+  /* 101 */    { "Sapper Hill 43",     17,     -355,   16,     74      },
+  /* 102 */    { "Schwarzeck",                 3,      616,    97,     -251    },
+  /* 103 */    { "Sicily",             17,     -97,    -88,    -135    },
+  /* 104 */    { "Sierra Leone 1960",  26,     0,      0,      0       },
+  /* 105 */    { "S. Am. 1969 mean",   22,     -57,    1,      -41     },
+  /* 106 */    { "South Asia",         13,     7,      -10,    -26     },
+  /* 107 */    { "Southeast Base",     17,     -499,   -249,   314     },
+  /* 108 */    { "Southwest Base",     17,     -104,   167,    -38     },
+  /* 109 */    { "Tananarive Obs 25",  17,     -189,   -242,   -91     },
+  /* 110 */    { "Thai/Viet (Indian)",         7,      214,    836,    303     },
+  /* 111 */    { "Timbalai 1948",              7,      -689,   691,    -45     },
+  /* 112 */    { "Tokyo mean",                 4,      -128,   481,    664     },
+  /* 113 */    { "Tristan Astro 1968", 17,     -632,   438,    -609    },
+  /* 114 */    { "United Arab Emirates",       6,      -249,   -156,   381     },
+  /* 115 */    { "Viti Levu 1916",             6,      51,     391,    -36     },
+  /* 116 */    { "Wake Eniwetok 60",   15,     101,    52,     -39     },
+  /* 117 */    { "WGS 72",             25,     0,      0,      5       },
+  /* 118 */    { "WGS 84",             26,     0,      0,      0       },
+  /* 119 */    { "Yacare",             17,     -155,   171,    37      },
+  /* 120 */    { "Zanderij",           17,     -265,   120,    -358    },
+  /* 121 */    { "Sweden",             4,      424.3,  -80.5,  613.1   },
+  /* 122 */    { "GDA 94",             21,     0,      0,      0       },
+  /* 123 */    { "CH-1903",            4,      674,    15,     405     },
+  /* 124 */    { "Palestine 1923",        27,     -235,   -85,    264     },
+  /* 125 */    { "ITM (Israeli New)",     21,     -48,     55,    -52     },
+  { nullptr,                   0,      0,      0,      0       }
+};
+
+
+struct GPS_Datum_Alias {
+  const char* alias;
+  int datum;
+};
+
+const GPS_Datum_Alias GPS_DatumAliases[] = {
+  { "Australian GDA94", 122 },
+  { "Australian Geocentric 1994 (GDA94)", 122},  /* Observed in Ozi */
+  { "GDA94", 122 },
+  { "GDA-94", 122 },
+  { "CH1903", 123 },
+  { "CH 1903", 123 },
+  { "European 1950 (Spain and Portugal)", 38 },
+  { "Geodetic Datum 1949", 42 },
+  { "NAD27 Alaska", 3 },
+  { "NAD27 Bahamas", 14 },
+  { "NAD27 Canada", 4 },
+  { "NAD27 Canal Zone", 21 },
+  { "NAD27 Caribbean", 25 },
+  { "NAD27 Central", 27 },
+  { "NAD27 CONUS", 78 },
+  { "NAD27 Cuba", 31 },
+  { "NAD27 Greenland", 44 },
+  { "NAD27 Mexico", 70 },
+  { "NAD83", 77 },
+  { "NAD 83", 77 },
+  { "NAD-83", 77 },
+  { "OSGB 36", 86 },
+  { "OSGB-36", 86 },
+  { "Wake-Eniwetok 1960", 116 },
+  { "WGS72", 117 },
+  { "WGS-72", 117 },
+  { "WGS84", 118 },
+  { "WGS-84", 118 },
+  { "Israeli", 124 },
+  { "D_Israel_new", 125 },
+  { nullptr, -1 }
+};
+
+
+/* UK Ordnance Survey Nation Grid Map Codes */
+static const char* const UKNG[]= {
+  "SV","SW","SX","SY","SZ","TV","TW","SQ","SR","SS","ST","SU","TQ","TR",
+  "SL","SM","SN","SO","SP","TL","TM","SF","SG","SH","SJ","SK","TF","TG",
+  "SA","SB","SC","SD","SE","TA","TB","NV","NW","NX","NY","NZ","OV","OW",
+  "NQ","NR","NS","NT","NU","OQ","OR","NL","NM","NN","NO","NP","OL","OM",
+  "NF","NG","NH","NJ","NK","OF","OG","NA","NB","NC","ND","NE","OA","OB",
+  "HV","HW","HX","HY","HZ","JV","JW","HQ","HR","HS","HT","HU","JQ","JR",
+  "HL","HM","HN","HO","HP","JL","JM",""
+};
 
 
 
index 56a24581a958e728ef170c6761a1b32f0e7c9e55..8da383fa5b79cba944471bfa224d8d1eb61aa68d 100644 (file)
 ** Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 ** Boston, MA  02110-1301, USA.
 ********************************************************************/
-#include "jeeps/gps.h"
-#include "jeeps/gpsdatum.h"
-#include <cmath>
-#include <cstdlib>
-#include <cstring>
+#include "jeeps/gpsmath.h"
+
+#include <cassert>           // for assert
+#include <cmath>             // for sin, tan, cos, pow, log, sqrt, asin, atan, exp, fabs, round
+#include <cstdint>           // for int32_t
+#include <cstdlib>           // for abs
+#include <cstring>           // for strcmp, strcpy
+#include <ctime>             // for time_t
+
+#include <QString>           // for QString
+
+#include "defs.h"            // for case_ignore_strcmp, fatal, CSTR
+#include "jeeps/gpsdatum.h"  // for GPS_ODatum, GPS_OEllipse, GPS_Datums, GPS_Ellipses, UKNG, GPS_SDatum_Alias, GPS_SDatum, GPS_DatumAliases, GPS_PDatum, GPS_PDatum_Alias
 
 
 static int32_t GPS_Math_LatLon_To_UTM_Param(double lat, double lon, int32_t* zone,
@@ -705,8 +713,9 @@ int32_t GPS_Math_WGS84_To_Swiss_EN(double lat, double lon, double* E,
     return 0;
   }
 
-  a = GPS_Ellipse[4].a;
-  b = a - (a / GPS_Ellipse[4].invf);
+  assert(strcmp(GPS_Ellipses[4].name, "Bessel 1841") == 0);
+  a = GPS_Ellipses[4].a;
+  b = a - (a / GPS_Ellipses[4].invf);
 
   GPS_Math_WGS84_To_Known_Datum_M(lat, lon, 0, &phi, &lambda, &alt, 123);
   GPS_Math_Swiss_LatLon_To_EN(phi, lambda, E, N, phi0, lambda0, E0, N0, a, b);
@@ -735,8 +744,9 @@ void GPS_Math_Swiss_EN_To_WGS84(double E, double N, double* lat, double* lon)
   const double N0 = 200000.0;
   double phi, lambda, alt, a, b;
 
-  a = GPS_Ellipse[4].a;
-  b = a - (a / GPS_Ellipse[4].invf);
+  assert(strcmp(GPS_Ellipses[4].name, "Bessel 1841") == 0);
+  a = GPS_Ellipses[4].a;
+  b = a - (a / GPS_Ellipses[4].invf);
 
   GPS_Math_Swiss_EN_To_LatLon(E, N, &phi, &lambda, phi0, lambda0, E0, N0, a, b);
   GPS_Math_Known_Datum_To_WGS84_M(phi, lambda, 0, lat, lon, &alt, 123);
@@ -1099,10 +1109,10 @@ int32_t GPS_Math_WGS84_To_ICS_EN(double lat, double lon, double* E,
   if (datum < 0) {
     fatal("Unable to find Palestine 1923 in internal tables");
   }
-  int32_t ellipse = GPS_Datum[datum].ellipse;
+  int32_t ellipse = GPS_Datums[datum].ellipse;
 
-  a = GPS_Ellipse[ellipse].a;
-  b = a - (a / GPS_Ellipse[ellipse].invf);
+  a = GPS_Ellipses[ellipse].a;
+  b = a - (a / GPS_Ellipses[ellipse].invf);
 
   GPS_Math_WGS84_To_Known_Datum_M(lat, lon, 0, &phi, &lambda, &alt, datum);
   GPS_Math_Cassini_LatLon_To_EN(phi, lambda, E, N,
@@ -1135,10 +1145,10 @@ void GPS_Math_ICS_EN_To_WGS84(double E, double N, double* lat, double* lon)
   if (datum < 0) {
     fatal("Unable to find Palestine 1923 in internal tables");
   }
-  int32_t ellipse = GPS_Datum[datum].ellipse;
+  int32_t ellipse = GPS_Datums[datum].ellipse;
 
-  a = GPS_Ellipse[ellipse].a;
-  b = a - (a / GPS_Ellipse[ellipse].invf);
+  a = GPS_Ellipses[ellipse].a;
+  b = a - (a / GPS_Ellipses[ellipse].invf);
 
   GPS_Math_Cassini_EN_To_LatLon(E, N, &phi, &lambda, phi0, lambda0,
                                 E0, N0, a, b);
@@ -1519,7 +1529,7 @@ void GPS_Math_Molodensky(double Sphi, double Slam, double SH, double Sa,
 ** @param [w] Dphi [double *] dest latitude (deg)
 ** @param [w] Dlam [double *] dest longitude (deg)
 ** @param [w] DH   [double *] dest height  (metres)
-** @param [r] n    [int32] datum number from GPS_Datum structure
+** @param [r] n    [int32] datum number from GPS_Datums structure
 **
 ** @return [void]
 ************************************************************************/
@@ -1539,12 +1549,12 @@ void GPS_Math_Known_Datum_To_WGS84_M(double Sphi, double Slam, double SH,
   Da  = 6378137.0;
   Dif = 298.257223563;
 
-  idx  = GPS_Datum[n].ellipse;
-  Sa   = GPS_Ellipse[idx].a;
-  Sif  = GPS_Ellipse[idx].invf;
-  x    = GPS_Datum[n].dx;
-  y    = GPS_Datum[n].dy;
-  z    = GPS_Datum[n].dz;
+  idx  = GPS_Datums[n].ellipse;
+  Sa   = GPS_Ellipses[idx].a;
+  Sif  = GPS_Ellipses[idx].invf;
+  x    = GPS_Datums[n].dx;
+  y    = GPS_Datums[n].dy;
+  z    = GPS_Datums[n].dz;
 
   GPS_Math_Molodensky(Sphi,Slam,SH,Sa,Sif,Dphi,Dlam,DH,Da,Dif,x,y,z);
 
@@ -1563,7 +1573,7 @@ void GPS_Math_Known_Datum_To_WGS84_M(double Sphi, double Slam, double SH,
 ** @param [w] Dphi [double *] dest latitude (deg)
 ** @param [w] Dlam [double *] dest longitude (deg)
 ** @param [w] DH   [double *] dest height  (metres)
-** @param [r] n    [int32] datum number from GPS_Datum structure
+** @param [r] n    [int32] datum number from GPS_Datums structure
 **
 ** @return [void]
 ************************************************************************/
@@ -1583,12 +1593,12 @@ void GPS_Math_WGS84_To_Known_Datum_M(double Sphi, double Slam, double SH,
   Sa  = 6378137.0;
   Sif = 298.257223563;
 
-  idx  = GPS_Datum[n].ellipse;
-  Da   = GPS_Ellipse[idx].a;
-  Dif  = GPS_Ellipse[idx].invf;
-  x    = -GPS_Datum[n].dx;
-  y    = -GPS_Datum[n].dy;
-  z    = -GPS_Datum[n].dz;
+  idx  = GPS_Datums[n].ellipse;
+  Da   = GPS_Ellipses[idx].a;
+  Dif  = GPS_Ellipses[idx].invf;
+  x    = -GPS_Datums[n].dx;
+  y    = -GPS_Datums[n].dy;
+  z    = -GPS_Datums[n].dz;
 
   GPS_Math_Molodensky(Sphi,Slam,SH,Sa,Sif,Dphi,Dlam,DH,Da,Dif,x,y,z);
 
@@ -1607,7 +1617,7 @@ void GPS_Math_WGS84_To_Known_Datum_M(double Sphi, double Slam, double SH,
 ** @param [w] Dphi [double *] dest latitude (deg)
 ** @param [w] Dlam [double *] dest longitude (deg)
 ** @param [w] DH   [double *] dest height  (metres)
-** @param [r] n    [int32] datum number from GPS_Datum structure
+** @param [r] n    [int32] datum number from GPS_Datums structure
 **
 ** @return [void]
 ************************************************************************/
@@ -1633,14 +1643,14 @@ void GPS_Math_Known_Datum_To_WGS84_C(double Sphi, double Slam, double SH,
   Dif = 298.257223563;
   Db  = Da - (Da / Dif);
 
-  idx  = GPS_Datum[n].ellipse;
-  Sa   = GPS_Ellipse[idx].a;
-  Sif  = GPS_Ellipse[idx].invf;
+  idx  = GPS_Datums[n].ellipse;
+  Sa   = GPS_Ellipses[idx].a;
+  Sif  = GPS_Ellipses[idx].invf;
   Sb   = Sa - (Sa / Sif);
 
-  x    = GPS_Datum[n].dx;
-  y    = GPS_Datum[n].dy;
-  z    = GPS_Datum[n].dz;
+  x    = GPS_Datums[n].dx;
+  y    = GPS_Datums[n].dy;
+  z    = GPS_Datums[n].dz;
 
   GPS_Math_LatLonH_To_XYZ(Sphi,Slam,SH,&sx,&sy,&sz,Sa,Sb);
   sx += x;
@@ -1664,7 +1674,7 @@ void GPS_Math_Known_Datum_To_WGS84_C(double Sphi, double Slam, double SH,
 ** @param [w] Dphi [double *] dest latitude (deg)
 ** @param [w] Dlam [double *] dest longitude (deg)
 ** @param [w] DH   [double *] dest height  (metres)
-** @param [r] n    [int32] datum number from GPS_Datum structure
+** @param [r] n    [int32] datum number from GPS_Datums structure
 **
 ** @return [void]
 ************************************************************************/
@@ -1690,14 +1700,14 @@ void GPS_Math_WGS84_To_Known_Datum_C(double Sphi, double Slam, double SH,
   Sif = 298.257223563;
   Sb   = Sa - (Sa / Sif);
 
-  idx  = GPS_Datum[n].ellipse;
-  Da   = GPS_Ellipse[idx].a;
-  Dif  = GPS_Ellipse[idx].invf;
+  idx  = GPS_Datums[n].ellipse;
+  Da   = GPS_Ellipses[idx].a;
+  Dif  = GPS_Ellipses[idx].invf;
   Db  = Da - (Da / Dif);
 
-  x    = -GPS_Datum[n].dx;
-  y    = -GPS_Datum[n].dy;
-  z    = -GPS_Datum[n].dz;
+  x    = -GPS_Datums[n].dx;
+  y    = -GPS_Datums[n].dy;
+  z    = -GPS_Datums[n].dz;
 
   GPS_Math_LatLonH_To_XYZ(Sphi,Slam,SH,&dx,&dy,&dz,Sa,Sb);
   dx += x;
@@ -1721,8 +1731,8 @@ void GPS_Math_WGS84_To_Known_Datum_C(double Sphi, double Slam, double SH,
 ** @param [w] Dphi [double *] dest latitude (deg)
 ** @param [w] Dlam [double *] dest longitude (deg)
 ** @param [w] DH   [double *] dest height  (metres)
-** @param [r] n1   [int32] source datum number from GPS_Datum structure
-** @param [r] n2   [int32] dest   datum number from GPS_Datum structure
+** @param [r] n1   [int32] source datum number from GPS_Datums structure
+** @param [r] n2   [int32] dest   datum number from GPS_Datums structure
 **
 ** @return [void]
 ************************************************************************/
@@ -1748,19 +1758,19 @@ void GPS_Math_Known_Datum_To_Known_Datum_M(double Sphi, double Slam, double SH,
   int32_t idx2;
 
 
-  idx1 = GPS_Datum[n1].ellipse;
-  Sa   = GPS_Ellipse[idx1].a;
-  Sif  = GPS_Ellipse[idx1].invf;
-  x1   = GPS_Datum[n1].dx;
-  y1   = GPS_Datum[n1].dy;
-  z1   = GPS_Datum[n1].dz;
+  idx1 = GPS_Datums[n1].ellipse;
+  Sa   = GPS_Ellipses[idx1].a;
+  Sif  = GPS_Ellipses[idx1].invf;
+  x1   = GPS_Datums[n1].dx;
+  y1   = GPS_Datums[n1].dy;
+  z1   = GPS_Datums[n1].dz;
 
-  idx2 = GPS_Datum[n2].ellipse;
-  Da   = GPS_Ellipse[idx2].a;
-  Dif  = GPS_Ellipse[idx2].invf;
-  x2   = GPS_Datum[n2].dx;
-  y2   = GPS_Datum[n2].dy;
-  z2   = GPS_Datum[n2].dz;
+  idx2 = GPS_Datums[n2].ellipse;
+  Da   = GPS_Ellipses[idx2].a;
+  Dif  = GPS_Ellipses[idx2].invf;
+  x2   = GPS_Datums[n2].dx;
+  y2   = GPS_Datums[n2].dy;
+  z2   = GPS_Datums[n2].dz;
 
   x = -(x2-x1);
   y = -(y2-y1);
@@ -1783,8 +1793,8 @@ void GPS_Math_Known_Datum_To_Known_Datum_M(double Sphi, double Slam, double SH,
 ** @param [w] Dphi [double *] dest latitude (deg)
 ** @param [w] Dlam [double *] dest longitude (deg)
 ** @param [w] DH   [double *] dest height  (metres)
-** @param [r] n1   [int32] source datum number from GPS_Datum structure
-** @param [r] n2   [int32] dest   datum number from GPS_Datum structure
+** @param [r] n1   [int32] source datum number from GPS_Datums structure
+** @param [r] n2   [int32] dest   datum number from GPS_Datums structure
 **
 ** @return [void]
 ************************************************************************/
@@ -1812,23 +1822,23 @@ void GPS_Math_Known_Datum_To_Known_Datum_C(double Sphi, double Slam, double SH,
   double dy;
   double dz;
 
-  idx1  = GPS_Datum[n1].ellipse;
-  Sa    = GPS_Ellipse[idx1].a;
-  Sif   = GPS_Ellipse[idx1].invf;
+  idx1  = GPS_Datums[n1].ellipse;
+  Sa    = GPS_Ellipses[idx1].a;
+  Sif   = GPS_Ellipses[idx1].invf;
   Sb    = Sa - (Sa / Sif);
 
-  x1    = GPS_Datum[n1].dx;
-  y1    = GPS_Datum[n1].dy;
-  z1    = GPS_Datum[n1].dz;
+  x1    = GPS_Datums[n1].dx;
+  y1    = GPS_Datums[n1].dy;
+  z1    = GPS_Datums[n1].dz;
 
-  idx2  = GPS_Datum[n2].ellipse;
-  Da    = GPS_Ellipse[idx2].a;
-  Dif   = GPS_Ellipse[idx2].invf;
+  idx2  = GPS_Datums[n2].ellipse;
+  Da    = GPS_Ellipses[idx2].a;
+  Dif   = GPS_Ellipses[idx2].invf;
   Db    = Da - (Da / Dif);
 
-  x2    = GPS_Datum[n2].dx;
-  y2    = GPS_Datum[n2].dy;
-  z2    = GPS_Datum[n2].dz;
+  x2    = GPS_Datums[n2].dx;
+  y2    = GPS_Datums[n2].dy;
+  z2    = GPS_Datums[n2].dz;
 
   GPS_Math_LatLonH_To_XYZ(Sphi,Slam,SH,&dx,&dy,&dz,Sa,Sb);
   dx += -(x2-x1);
@@ -2116,8 +2126,9 @@ int32_t GPS_Math_NAD83_To_UTM_EN(double lat, double lon, double* E,
 
   phi0 = 0.0;
 
-  a = GPS_Ellipse[21].a;
-  b = a - (a/GPS_Ellipse[21].invf);
+  assert(strcmp(GPS_Ellipses[21].name, "GRS80") == 0);
+  a = GPS_Ellipses[21].a;
+  b = a - (a / GPS_Ellipses[21].invf);
 
   GPS_Math_LatLon_To_EN(E,N,lat,lon,N0,E0,phi0,lambda0,F0,a,b);
 
@@ -2243,7 +2254,7 @@ int32_t GPS_Math_UTM_EN_To_WGS84(double* lat, double* lon, double E,
     return 0;
   }
 
-  GPS_Math_UTM_EN_to_LatLon(GPS_Datum[118].ellipse, N, E, lat, lon, lambda0, E0, N0);
+  GPS_Math_UTM_EN_to_LatLon(GPS_Datums[118].ellipse, N, E, lat, lon, lambda0, E0, N0);
   return 1;
 }
 
@@ -2258,7 +2269,7 @@ int32_t GPS_Math_UTM_EN_To_WGS84(double* lat, double* lon, double E,
 ** @param [w] N    [double *] northing (metres)
 ** @param [w] zone [int32 *]  zone number
 ** @param [w] zc   [char *] zone character
-** @param [r] n    [int32] datum number from GPS_Datum structure
+** @param [r] n    [int32] datum number from GPS_Datums structure
 **
 ** @return [int32] success
 ************************************************************************/
@@ -2281,9 +2292,9 @@ int32_t GPS_Math_Known_Datum_To_UTM_EN(double lat, double lon, double* E,
 
   phi0 = 0.0;
 
-  idx  = GPS_Datum[n].ellipse;
-  a = GPS_Ellipse[idx].a;
-  b = a - (a/GPS_Ellipse[idx].invf);
+  idx  = GPS_Datums[n].ellipse;
+  a = GPS_Ellipses[idx].a;
+  b = a - (a / GPS_Ellipses[idx].invf);
 
   GPS_Math_LatLon_To_EN(E,N,lat,lon,N0,E0,phi0,lambda0,F0,a,b);
 
@@ -2300,7 +2311,7 @@ int32_t GPS_Math_Known_Datum_To_UTM_EN(double lat, double lon, double* E,
 ** @param [w] N    [double]   northing (metres)
 ** @param [w] zone [int32]      zone number
 ** @param [w] zc   [char]     zone character
-** @param [r] n    [int32] datum number from GPS_Datum structure
+** @param [r] n    [int32] datum number from GPS_Datums structure
 **
 ** @return [int32] success
 ************************************************************************/
@@ -2316,7 +2327,7 @@ int32_t GPS_Math_UTM_EN_To_Known_Datum(double* lat, double* lon, double E,
     return 0;
   }
 
-  GPS_Math_UTM_EN_to_LatLon(GPS_Datum[n].ellipse, N, E, lat, lon, lambda0, E0, N0);
+  GPS_Math_UTM_EN_to_LatLon(GPS_Datums[n].ellipse, N, E, lat, lon, lambda0, E0, N0);
   return 1;
 }
 
@@ -2514,8 +2525,8 @@ void GPS_Math_UTM_EN_to_LatLon(int ReferenceEllipsoid,
   double mu, phi1Rad;
   double x, y;
 
-  a = GPS_Ellipse[ReferenceEllipsoid].a;
-  b = 1 / GPS_Ellipse[ReferenceEllipsoid].invf;
+  a = GPS_Ellipses[ReferenceEllipsoid].a;
+  b = 1 / GPS_Ellipses[ReferenceEllipsoid].invf;
   eccSquared = b * (2.0 - b);
   e1 = (1-sqrt(1-eccSquared))/(1+sqrt(1-eccSquared));
 
@@ -2549,18 +2560,18 @@ void GPS_Math_UTM_EN_to_LatLon(int ReferenceEllipsoid,
 
 int32_t GPS_Lookup_Datum_Index(const char* n)
 {
-  GPS_PDatum dp;
-  GPS_PDatum_Alias al;
+  const GPS_Datum* dp;
+  const GPS_Datum_Alias* al;
 
-  for (al = GPS_DatumAlias; al->alias; al++) {
+  for (al = GPS_DatumAliases; al->alias; al++) {
     if (case_ignore_strcmp(al->alias, n) == 0) {
       return al->datum;
     }
   }
 
-  for (dp = GPS_Datum; dp->name; dp++) {
+  for (dp = GPS_Datums; dp->name; dp++) {
     if (0 == case_ignore_strcmp(dp->name, n)) {
-      return dp - GPS_Datum;
+      return dp - GPS_Datums;
     }
   }
 
@@ -2575,7 +2586,7 @@ int32_t GPS_Lookup_Datum_Index(const QString& n)
 const char*
 GPS_Math_Get_Datum_Name(const int datum_index)
 {
-  return GPS_Datum[datum_index].name;
+  return GPS_Datums[datum_index].name;
 }
 
 
index 39dd394b1c3fc6467700f0caaefcf570346fc9b8..19451987d804b9ff39cc53c0735347c6577cd257 100644 (file)
@@ -1,94 +1,96 @@
 #ifndef JEEPS_GPSMATH_H_INCLUDED_
 #define JEEPS_GPSMATH_H_INCLUDED_
 
-#include "jeeps/gpsport.h"
+#include <cstdint>   // for int32_t
+#include <ctime>     // for time_t
 
-#define GPS_PI 3.141592653589
-#define GPS_FLTMIN 1.75494351E-38
-#define GPS_FLTMAX 3.402823466E+38
+#include <QString>   // for QString
 
 
-  double GPS_Math_Deg_To_Rad(double v);
-  double GPS_Math_Rad_To_Deg(double v);
+constexpr double GPS_PI = 3.141592653589;
 
-  double GPS_Math_Metres_To_Feet(double v);
-  double GPS_Math_Feet_To_Metres(double v);
+
+double GPS_Math_Deg_To_Rad(double v);
+double GPS_Math_Rad_To_Deg(double v);
+
+double GPS_Math_Metres_To_Feet(double v);
+double GPS_Math_Feet_To_Metres(double v);
 
 int32_t GPS_Math_Deg_To_Semi(double v);
-  double GPS_Math_Semi_To_Deg(int32_t v);
+double GPS_Math_Semi_To_Deg(int32_t v);
 
-  time_t GPS_Math_Utime_To_Gtime(time_t v);
-  time_t GPS_Math_Gtime_To_Utime(time_t v);
+time_t GPS_Math_Utime_To_Gtime(time_t v);
+time_t GPS_Math_Gtime_To_Utime(time_t v);
 
-  void   GPS_Math_Deg_To_DegMin(double v, int32_t* d, double* m);
-  void   GPS_Math_DegMin_To_Deg(int32_t d, double m, double* deg);
-  void   GPS_Math_Deg_To_DegMinSec(double v, int32_t* d, int32_t* m, double* s);
-  void   GPS_Math_DegMinSec_To_Deg(int32_t d, int32_t m, double s, double* deg);
+void   GPS_Math_Deg_To_DegMin(double v, int32_t* d, double* m);
+void   GPS_Math_DegMin_To_Deg(int32_t d, double m, double* deg);
+void   GPS_Math_Deg_To_DegMinSec(double v, int32_t* d, int32_t* m, double* s);
+void   GPS_Math_DegMinSec_To_Deg(int32_t d, int32_t m, double s, double* deg);
 
 
-  void GPS_Math_Airy1830LatLonToNGEN(double phi, double lambda, double* E,
-                                     double* N);
-  void GPS_Math_Airy1830M_LatLonToINGEN(double phi, double lambda, double* E,
-                                        double* N);
+void GPS_Math_Airy1830LatLonToNGEN(double phi, double lambda, double* E,
+                                   double* N);
+void GPS_Math_Airy1830M_LatLonToINGEN(double phi, double lambda, double* E,
+                                      double* N);
 int32_t GPS_Math_EN_To_UKOSNG_Map(double E, double N, double* mE,
                                   double* mN, char* map);
 int32_t GPS_Math_UKOSNG_Map_To_EN(const char* map, double mapE, double mapN,
                                   double* E, double* N);
 
-  void GPS_Math_LatLonH_To_XYZ(double phi, double lambda, double H,
-                               double* x, double* y, double* z,
-                               double a, double b);
-  void GPS_Math_XYZ_To_LatLonH(double* phi, double* lambda, double* H,
-                               double x, double y, double z,
-                               double a, double b);
-
-  void GPS_Math_EN_To_LatLon(double E, double N, double* phi,
-                             double* lambda, double N0, double E0,
-                             double phi0, double lambda0,
-                             double F0, double a, double b);
-  void GPS_Math_LatLon_To_EN(double* E, double* N, double phi,
-                             double lambda, double N0, double E0,
-                             double phi0, double lambda0,
-                             double F0, double a, double b);
-
-  void GPS_Math_NGENToAiry1830LatLon(double E, double N, double* phi,
+void GPS_Math_LatLonH_To_XYZ(double phi, double lambda, double H,
+                             double* x, double* y, double* z,
+                             double a, double b);
+void GPS_Math_XYZ_To_LatLonH(double* phi, double* lambda, double* H,
+                             double x, double y, double z,
+                             double a, double b);
+
+void GPS_Math_EN_To_LatLon(double E, double N, double* phi,
+                           double* lambda, double N0, double E0,
+                           double phi0, double lambda0,
+                           double F0, double a, double b);
+void GPS_Math_LatLon_To_EN(double* E, double* N, double phi,
+                           double lambda, double N0, double E0,
+                           double phi0, double lambda0,
+                           double F0, double a, double b);
+
+void GPS_Math_NGENToAiry1830LatLon(double E, double N, double* phi,
+                                   double* lambda);
+void GPS_Math_INGENToAiry1830MLatLon(double E, double N, double* phi,
                                      double* lambda);
-  void GPS_Math_INGENToAiry1830MLatLon(double E, double N, double* phi,
-                                       double* lambda);
-
-
-  void GPS_Math_Airy1830LatLonH_To_XYZ(double phi, double lambda, double H,
-                                       double* x, double* y, double* z);
-  void GPS_Math_WGS84LatLonH_To_XYZ(double phi, double lambda, double H,
-                                    double* x, double* y, double* z);
-  void GPS_Math_XYZ_To_Airy1830LatLonH(double* phi, double* lambda, double* H,
-                                       double x, double y, double z);
-  void GPS_Math_XYZ_To_WGS84LatLonH(double* phi, double* lambda, double* H,
-                                    double x, double y, double z);
-
-  void GPS_Math_Molodensky(double Sphi, double Slam, double SH, double Sa,
-                           double Sif, double* Dphi, double* Dlam,
-                           double* DH, double Da, double Dif, double dx,
-                           double dy, double dz);
-  void GPS_Math_Known_Datum_To_WGS84_M(double Sphi, double Slam, double SH,
-                                       double* Dphi, double* Dlam, double* DH,
-                                       int32_t n);
-  void GPS_Math_WGS84_To_Known_Datum_M(double Sphi, double Slam, double SH,
-                                       double* Dphi, double* Dlam, double* DH,
-                                       int32_t n);
-  void GPS_Math_Known_Datum_To_WGS84_C(double Sphi, double Slam, double SH,
-                                       double* Dphi, double* Dlam, double* DH,
-                                       int32_t n);
-  void GPS_Math_WGS84_To_Known_Datum_C(double Sphi, double Slam, double SH,
-                                       double* Dphi, double* Dlam, double* DH,
-                                       int32_t n);
-
-  void GPS_Math_Known_Datum_To_Known_Datum_M(double Sphi, double Slam, double SH,
-      double* Dphi, double* Dlam,
-      double* DH, int32_t n1, int32_t n2);
-  void GPS_Math_Known_Datum_To_Known_Datum_C(double Sphi, double Slam, double SH,
-      double* Dphi, double* Dlam,
-      double* DH, int32_t n1, int32_t n2);
+
+
+void GPS_Math_Airy1830LatLonH_To_XYZ(double phi, double lambda, double H,
+                                     double* x, double* y, double* z);
+void GPS_Math_WGS84LatLonH_To_XYZ(double phi, double lambda, double H,
+                                  double* x, double* y, double* z);
+void GPS_Math_XYZ_To_Airy1830LatLonH(double* phi, double* lambda, double* H,
+                                     double x, double y, double z);
+void GPS_Math_XYZ_To_WGS84LatLonH(double* phi, double* lambda, double* H,
+                                  double x, double y, double z);
+
+void GPS_Math_Molodensky(double Sphi, double Slam, double SH, double Sa,
+                         double Sif, double* Dphi, double* Dlam,
+                         double* DH, double Da, double Dif, double dx,
+                         double dy, double dz);
+void GPS_Math_Known_Datum_To_WGS84_M(double Sphi, double Slam, double SH,
+                                     double* Dphi, double* Dlam, double* DH,
+                                     int32_t n);
+void GPS_Math_WGS84_To_Known_Datum_M(double Sphi, double Slam, double SH,
+                                     double* Dphi, double* Dlam, double* DH,
+                                     int32_t n);
+void GPS_Math_Known_Datum_To_WGS84_C(double Sphi, double Slam, double SH,
+                                     double* Dphi, double* Dlam, double* DH,
+                                     int32_t n);
+void GPS_Math_WGS84_To_Known_Datum_C(double Sphi, double Slam, double SH,
+                                     double* Dphi, double* Dlam, double* DH,
+                                     int32_t n);
+
+void GPS_Math_Known_Datum_To_Known_Datum_M(double Sphi, double Slam, double SH,
+    double* Dphi, double* Dlam,
+    double* DH, int32_t n1, int32_t n2);
+void GPS_Math_Known_Datum_To_Known_Datum_C(double Sphi, double Slam, double SH,
+    double* Dphi, double* Dlam,
+    double* DH, int32_t n1, int32_t n2);
 
 int32_t GPS_Math_WGS84_To_UKOSMap_M(double lat, double lon, double* mE,
                                     double* mN, char* map);
@@ -115,34 +117,34 @@ int32_t GPS_Math_Known_Datum_To_UTM_EN(double lat, double lon, double* E,
 int32_t GPS_Math_UTM_EN_To_Known_Datum(double* lat, double* lon, double E,
                                        double N, int32_t zone, char zc, int n);
 
-  void GPS_Math_Swiss_LatLon_To_EN(double phi, double lambda, double* E,
-                                   double* N,double phi0,double lambda0,
+void GPS_Math_Swiss_LatLon_To_EN(double phi, double lambda, double* E,
+                                 double* N,double phi0,double lambda0,
+                                 double E0, double N0, double a, double b);
+void GPS_Math_Swiss_EN_To_LatLon(double E, double N, double* phi,
+                                 double* lambda, double phi0, double lambda0,
+                                 double E0, double N0, double a, double b);
+
+void GPS_Math_Cassini_LatLon_To_EN(double phi, double lambda, double* E,
+                                   double* N, double phi0, double M0,
                                    double E0, double N0, double a, double b);
-  void GPS_Math_Swiss_EN_To_LatLon(double E, double N, double* phi,
-                                   double* lambda, double phi0, double lambda0,
+void GPS_Math_Cassini_EN_To_LatLon(double E, double N, double* phi,
+                                   double* lambda, double phi0, double M0,
                                    double E0, double N0, double a, double b);
 
-  void GPS_Math_Cassini_LatLon_To_EN(double phi, double lambda, double* E,
-                                     double* N, double phi0, double M0,
-                                     double E0, double N0, double a, double b);
-  void GPS_Math_Cassini_EN_To_LatLon(double E, double N, double* phi,
-                                     double* lambda, double phi0, double M0,
-                                     double E0, double N0, double a, double b);
-
 int32_t GPS_Math_WGS84_To_ICS_EN(double lat, double lon, double* E,
                                  double* N);
-  void GPS_Math_ICS_EN_To_WGS84(double E, double N, double* lat, double* lon);
+void GPS_Math_ICS_EN_To_WGS84(double E, double N, double* lat, double* lon);
 
 int32_t GPS_Math_WGS84_To_Swiss_EN(double phi, double lambda, double* E, double* N);
-  void GPS_Math_Swiss_EN_To_WGS84(double E, double N, double* lat, double* lon);
+void GPS_Math_Swiss_EN_To_WGS84(double E, double N, double* lat, double* lon);
 
-  void GPS_Math_UTM_EN_to_LatLon(int ReferenceEllipsoid,
-                                 double UTMNorthing, double UTMEasting,
-                                 double* Lat, double* Lon,
-                                 double lambda0, double E0, double N0);
+void GPS_Math_UTM_EN_to_LatLon(int ReferenceEllipsoid,
+                               double UTMNorthing, double UTMEasting,
+                               double* Lat, double* Lon,
+                               double lambda0, double E0, double N0);
 
 int32_t GPS_Lookup_Datum_Index(const char* n);
 int32_t GPS_Lookup_Datum_Index(const QString& n);
-  const char* GPS_Math_Get_Datum_Name(int datum_index);
+const char* GPS_Math_Get_Datum_Name(int datum_index);
 
 #endif // JEEPS_GPSMATH_H_INCLUDED_
index 01038d9fa58a8c21da39f1f07b56b718d4705064..2d9fe6588ea024c446048100cf667db3a8c637ad 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef JEEPS_GPSMEM_H_INCLUDED_
 #define JEEPS_GPSMEM_H_INCLUDED_
 
+constexpr double GPS_FLTMIN = 1.75494351E-38;
+constexpr double GPS_FLTMAX = 3.402823466E+38;
 
 #include "jeeps/gps.h"
   GPS_PPvt_Data     GPS_Pvt_New();
index 8f138e33b8fc7ecddfebb5fd0f422d0585faac10..9e6c0602eb8b13649f5bb66dbff350e1968f7b6d 100644 (file)
 ** Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 ** Boston, MA  02110-1301, USA.
 ********************************************************************/
-#include "jeeps/gps.h"
-#include <cmath>
-#include <cstring>
+#include "jeeps/gpsproj.h"
+
+#include <cmath>            // for sin, pow, cos, fabs, log, tan, asin, atan, atan2, sqrt, exp, acos, sinh
+
+#include "jeeps/gpsmath.h"  // for GPS_Math_Deg_To_Rad, GPS_PI, GPS_Math_Rad_To_Deg, GPS_Math_EN_To_LatLon, GPS_Math_LatLon_To_EN, GPS_Math_Cassini_EN_To_LatLon, GPS_Math_Cassini_LatLon_To_EN, GPS_Math_Swiss_EN_To_LatLon, GPS_Math_Swiss_LatLon_To_EN
 
 
 /* @func GPS_Math_Albers_LatLon_To_EN **********************************
index cbdca53dfd12e17b521e73d88e23bf38a70f1f56..dd14711fd03e0dfde6fa080cdce760f29047eca9 100644 (file)
 #define JEEPS_GPSPROJ_H_INCLUDED_
 
 
-#include "jeeps/gps.h"
+void GPS_Math_Albers_LatLon_To_EN(double phi, double lambda, double* E,
+                                  double* N, double phi1, double phi2,
+                                  double phi0, double M0, double E0,
+                                  double N0, double a, double b);
+void GPS_Math_Albers_EN_To_LatLon(double E, double N, double* phi,
+                                  double* lambda, double phi1, double phi2,
+                                  double phi0, double M0, double E0,
+                                  double N0, double a, double b);
+
+
+void GPS_Math_LambertCC_LatLon_To_EN(double phi, double lambda, double* E,
+                                     double* N, double phi1, double phi2,
+                                     double phi0, double M0, double E0,
+                                     double N0, double a, double b);
+void GPS_Math_LambertCC_EN_To_LatLon(double E, double N, double* phi,
+                                     double* lambda, double phi1, double phi2,
+                                     double phi0, double M0, double E0,
+                                     double N0, double a, double b);
+
+void GPS_Math_Miller_LatLon_To_EN(double phi, double lambda, double* E,
+                                  double* N, double M0, double E0,
+                                  double N0, double a, double b);
+void GPS_Math_Miller_EN_To_LatLon(double E, double N, double* phi,
+                                  double* lambda, double M0, double E0,
+                                  double N0, double a, double b);
+
+void GPS_Math_Bonne_LatLon_To_EN(double phi, double lambda, double* E,
+                                 double* N, double phi0, double M0, double E0,
+                                 double N0, double a, double b);
+void GPS_Math_Bonne_EN_To_LatLon(double E, double N, double* phi,
+                                 double* lambda, double phi0, double M0,
+                                 double E0, double N0, double a, double b);
+
+void GPS_Math_Cassini_LatLon_To_EN(double phi, double lambda, double* E,
+                                   double* N, double phi0, double M0,
+                                   double E0, double N0, double a, double b);
+void GPS_Math_Cassini_EN_To_LatLon(double E, double N, double* phi,
+                                   double* lambda, double phi0, double M0,
+                                   double E0, double N0, double a, double b);
 
-  void GPS_Math_Albers_LatLon_To_EN(double phi, double lambda, double* E,
-                                    double* N, double phi1, double phi2,
-                                    double phi0, double M0, double E0,
+void GPS_Math_Cylea_LatLon_To_EN(double phi, double lambda, double* E,
+                                 double* N, double phi0, double M0,
+                                 double E0, double N0, double a, double b);
+void GPS_Math_Cylea_EN_To_LatLon(double E, double N, double* phi,
+                                 double* lambda, double phi0, double M0,
+                                 double E0, double N0, double a, double b);
+
+void GPS_Math_EckertIV_LatLon_To_EN(double phi, double lambda, double* E,
+                                    double* N, double M0, double E0, double N0,
+                                    double a, double b);
+void GPS_Math_EckertIV_EN_To_LatLon(double E, double N, double* phi,
+                                    double* lambda, double M0, double E0,
                                     double N0, double a, double b);
-  void GPS_Math_Albers_EN_To_LatLon(double E, double N, double* phi,
-                                    double* lambda, double phi1, double phi2,
-                                    double phi0, double M0, double E0,
+
+void GPS_Math_EckertVI_LatLon_To_EN(double phi, double lambda, double* E,
+                                    double* N, double M0, double E0, double N0,
+                                    double a, double b);
+void GPS_Math_EckertVI_EN_To_LatLon(double E, double N, double* phi,
+                                    double* lambda, double M0, double E0,
                                     double N0, double a, double b);
 
+void GPS_Math_Cyled_LatLon_To_EN(double phi, double lambda, double* E,
+                                 double* N, double phi0, double M0, double E0,
+                                 double N0, double a, double b);
+void GPS_Math_Cyled_EN_To_LatLon(double E, double N, double* phi,
+                                 double* lambda, double phi0, double M0,
+                                 double E0, double N0, double a, double b);
 
-  void GPS_Math_LambertCC_LatLon_To_EN(double phi, double lambda, double* E,
-                                       double* N, double phi1, double phi2,
-                                       double phi0, double M0, double E0,
+void GPS_Math_VderGrinten_LatLon_To_EN(double phi, double lambda, double* E,
+                                       double* N, double M0, double E0,
                                        double N0, double a, double b);
-  void GPS_Math_LambertCC_EN_To_LatLon(double E, double N, double* phi,
-                                       double* lambda, double phi1, double phi2,
-                                       double phi0, double M0, double E0,
+void GPS_Math_VderGrinten_EN_To_LatLon(double E, double N, double* phi,
+                                       double* lambda, double M0, double E0,
                                        double N0, double a, double b);
 
-  void GPS_Math_Miller_LatLon_To_EN(double phi, double lambda, double* E,
-                                    double* N, double M0, double E0,
-                                    double N0, double a, double b);
-  void GPS_Math_Miller_EN_To_LatLon(double E, double N, double* phi,
-                                    double* lambda, double M0, double E0,
-                                    double N0, double a, double b);
-
-  void GPS_Math_Bonne_LatLon_To_EN(double phi, double lambda, double* E,
-                                   double* N, double phi0, double M0, double E0,
-                                   double N0, double a, double b);
-  void GPS_Math_Bonne_EN_To_LatLon(double E, double N, double* phi,
-                                   double* lambda, double phi0, double M0,
+void GPS_Math_PolarSt_LatLon_To_EN(double phi, double lambda, double* E,
+                                   double* N, double phi1, double lambda1,
+                                   double E0, double N0, double a, double b);
+void GPS_Math_PolarSt_EN_To_LatLon(double E, double N, double* phi,
+                                   double* lambda, double phi1, double lambda1,
                                    double E0, double N0, double a, double b);
 
-  void GPS_Math_Cassini_LatLon_To_EN(double phi, double lambda, double* E,
-                                     double* N, double phi0, double M0,
-                                     double E0, double N0, double a, double b);
-  void GPS_Math_Cassini_EN_To_LatLon(double E, double N, double* phi,
-                                     double* lambda, double phi0, double M0,
-                                     double E0, double N0, double a, double b);
-
-  void GPS_Math_Cylea_LatLon_To_EN(double phi, double lambda, double* E,
+void GPS_Math_Mollweide_LatLon_To_EN(double phi, double lambda, double* E,
+                                     double* N, double M0, double E0,
+                                     double N0, double a, double b);
+void GPS_Math_Mollweide_EN_To_LatLon(double E, double N, double* phi,
+                                     double* lambda, double M0, double E0,
+                                     double N0, double a, double b);
+
+void GPS_Math_Orthog_LatLon_To_EN(double phi, double lambda, double* E,
+                                  double* N, double phi0, double lambda0,
+                                  double E0, double N0, double a, double b);
+void GPS_Math_Orthog_EN_To_LatLon(double E, double N, double* phi,
+                                  double* lambda, double phi0, double lambda0,
+                                  double E0, double N0, double a, double b);
+
+void GPS_Math_Polycon_LatLon_To_EN(double phi, double lambda, double* E,
                                    double* N, double phi0, double M0,
                                    double E0, double N0, double a, double b);
-  void GPS_Math_Cylea_EN_To_LatLon(double E, double N, double* phi,
+void GPS_Math_Polycon_EN_To_LatLon(double E, double N, double* phi,
                                    double* lambda, double phi0, double M0,
                                    double E0, double N0, double a, double b);
 
-  void GPS_Math_EckertIV_LatLon_To_EN(double phi, double lambda, double* E,
-                                      double* N, double M0, double E0, double N0,
-                                      double a, double b);
-  void GPS_Math_EckertIV_EN_To_LatLon(double E, double N, double* phi,
-                                      double* lambda, double M0, double E0,
-                                      double N0, double a, double b);
-
-  void GPS_Math_EckertVI_LatLon_To_EN(double phi, double lambda, double* E,
-                                      double* N, double M0, double E0, double N0,
-                                      double a, double b);
-  void GPS_Math_EckertVI_EN_To_LatLon(double E, double N, double* phi,
-                                      double* lambda, double M0, double E0,
-                                      double N0, double a, double b);
-
-  void GPS_Math_Cyled_LatLon_To_EN(double phi, double lambda, double* E,
-                                   double* N, double phi0, double M0, double E0,
-                                   double N0, double a, double b);
-  void GPS_Math_Cyled_EN_To_LatLon(double E, double N, double* phi,
-                                   double* lambda, double phi0, double M0,
-                                   double E0, double N0, double a, double b);
+void GPS_Math_Sinusoid_LatLon_To_EN(double phi, double lambda, double* E,
+                                    double* N, double M0, double E0,
+                                    double N0, double a, double b);
+void GPS_Math_Sinusoid_EN_To_LatLon(double E, double N, double* phi,
+                                    double* lambda, double M0, double E0,
+                                    double N0, double a, double b);
 
-  void GPS_Math_VderGrinten_LatLon_To_EN(double phi, double lambda, double* E,
-                                         double* N, double M0, double E0,
-                                         double N0, double a, double b);
-  void GPS_Math_VderGrinten_EN_To_LatLon(double E, double N, double* phi,
-                                         double* lambda, double M0, double E0,
-                                         double N0, double a, double b);
-
-  void GPS_Math_PolarSt_LatLon_To_EN(double phi, double lambda, double* E,
-                                     double* N, double phi1, double lambda1,
-                                     double E0, double N0, double a, double b);
-  void GPS_Math_PolarSt_EN_To_LatLon(double E, double N, double* phi,
-                                     double* lambda, double phi1, double lambda1,
-                                     double E0, double N0, double a, double b);
-
-  void GPS_Math_Mollweide_LatLon_To_EN(double phi, double lambda, double* E,
-                                       double* N, double M0, double E0,
-                                       double N0, double a, double b);
-  void GPS_Math_Mollweide_EN_To_LatLon(double E, double N, double* phi,
-                                       double* lambda, double M0, double E0,
-                                       double N0, double a, double b);
+void GPS_Math_TCylEA_LatLon_To_EN(double phi, double lambda, double* E,
+                                  double* N, double phi0, double M0, double E0,
+                                  double N0, double a, double b);
+void GPS_Math_TCylEA_EN_To_LatLon(double E, double N, double* phi,
+                                  double* lambda, double phi0, double M0,
+                                  double E0, double N0, double a, double b);
 
-  void GPS_Math_Orthog_LatLon_To_EN(double phi, double lambda, double* E,
+void GPS_Math_Mercator_LatLon_To_EN(double phi, double lambda, double* E,
                                     double* N, double phi0, double lambda0,
                                     double E0, double N0, double a, double b);
-  void GPS_Math_Orthog_EN_To_LatLon(double E, double N, double* phi,
-                                    double* lambda, double phi0, double lambda0,
-                                    double E0, double N0, double a, double b);
-
-  void GPS_Math_Polycon_LatLon_To_EN(double phi, double lambda, double* E,
-                                     double* N, double phi0, double M0,
-                                     double E0, double N0, double a, double b);
-  void GPS_Math_Polycon_EN_To_LatLon(double E, double N, double* phi,
-                                     double* lambda, double phi0, double M0,
-                                     double E0, double N0, double a, double b);
-
-  void GPS_Math_Sinusoid_LatLon_To_EN(double phi, double lambda, double* E,
-                                      double* N, double M0, double E0,
-                                      double N0, double a, double b);
-  void GPS_Math_Sinusoid_EN_To_LatLon(double E, double N, double* phi,
-                                      double* lambda, double M0, double E0,
-                                      double N0, double a, double b);
-
-  void GPS_Math_TCylEA_LatLon_To_EN(double phi, double lambda, double* E,
-                                    double* N, double phi0, double M0, double E0,
-                                    double N0, double a, double b);
-  void GPS_Math_TCylEA_EN_To_LatLon(double E, double N, double* phi,
-                                    double* lambda, double phi0, double M0,
-                                    double E0, double N0, double a, double b);
-
-  void GPS_Math_Mercator_LatLon_To_EN(double phi, double lambda, double* E,
-                                      double* N, double phi0, double lambda0,
-                                      double E0, double N0, double a, double b);
-  void GPS_Math_Mercator_EN_To_LatLon(double E, double N, double* phi,
-                                      double* lambda, double phi0,
-                                      double lambda0, double E0, double N0,
-                                      double a, double b);
-
-  void GPS_Math_TMerc_LatLon_To_EN(double phi, double lambda, double* E,
-                                   double* N, double phi0, double lambda0,
-                                   double E0, double N0, double F0,
-                                   double a, double b);
-  void GPS_Math_TMerc_EN_To_LatLon(double E, double N, double* phi,
-                                   double* lambda, double phi0, double lambda0,
-                                   double E0, double N0, double F0,
-                                   double a, double b);
-
-  void GPS_Math_Swiss_LatLon_To_EN(double phi, double lambda, double* E,
-                                   double* N,double phi0,double lambda0,
-                                   double E0, double N0, double a, double b);
-  void GPS_Math_Swiss_EN_To_LatLon(double E, double N, double* phi,
-                                   double* lambda, double phi0, double lambda0,
-                                   double E0, double N0, double a, double b);
+void GPS_Math_Mercator_EN_To_LatLon(double E, double N, double* phi,
+                                    double* lambda, double phi0,
+                                    double lambda0, double E0, double N0,
+                                    double a, double b);
+
+void GPS_Math_TMerc_LatLon_To_EN(double phi, double lambda, double* E,
+                                 double* N, double phi0, double lambda0,
+                                 double E0, double N0, double F0,
+                                 double a, double b);
+void GPS_Math_TMerc_EN_To_LatLon(double E, double N, double* phi,
+                                 double* lambda, double phi0, double lambda0,
+                                 double E0, double N0, double F0,
+                                 double a, double b);
+
+void GPS_Math_Swiss_LatLon_To_EN(double phi, double lambda, double* E,
+                                 double* N,double phi0,double lambda0,
+                                 double E0, double N0, double a, double b);
+void GPS_Math_Swiss_EN_To_LatLon(double E, double N, double* phi,
+                                 double* lambda, double phi0, double lambda0,
+                                 double E0, double N0, double a, double b);
 
 #endif // JEEPS_GPSPROJ_H_INCLUDED_